﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Ink;
using RozpoznawanieCore.KsztaltyFolder;

namespace RozpoznawanieCore
{
    class Ksztalt
    {
        public int x1;
        public int x2;
        public int y1;
        public int y2;
        public bool kompletny = false;
        public double pewnosc;
        public bool konczenie_totalne = false;
        public int orientacja;
        public StrokeCollection strokeCol=new StrokeCollection();
     virtual  public Ksztalt dolaczDoMnie(Ksztalt ks)
        {
            if ((this is Prostokat)) { return ((Prostokat)this).dolaczDoMnie(ks); }
            if ((this is Kreska)) { return ((Kreska)this).dolaczDoMnie(ks); }
            if ((this is Kat)) { return ((Kat)this).dolaczDoMnie(ks); }
            Console.WriteLine("dolaczam cos "+ (this is Prostokat));
            return null;
        }

       public static bool czyDwaPunktyBliskoSiebie(double x1, double y1, double x2, double y2, double dlugosc)
       {
           if (Math.Abs(x2 - x1) < dlugosc * 0.1 && Math.Abs(y2 - y1) < dlugosc * 0.1)
           {
               return true;
           }
           else return false;

       }
     
        public static  Ksztalt dajKsztalt( StrokeCollection stroki, String nazwa,int czasRysowania)
        {
            Console.WriteLine("daj ksztalt bedzi z nazwa " + nazwa+" "+stroki.Count);
            if (nazwa == "Rectangle" || nazwa == "Square" || nazwa == "Trapezoid"|| nazwa=="Parallelogram"|| nazwa=="Pentagon")
            {
                return new Prostokat(stroki,nazwa);
            }
            if (nazwa == "Ellipse")
            {
                return new Elipsa(stroki);
            }
            if (nazwa == "Circle")
            {
                return new Circles(stroki);

            }
                
            if (nazwa == "Straight")
            {Stroke s=stroki[0];
            return Kreska.zwrocKreske(s);
            }
          
            if (nazwa.Contains( "Other"))
            {
                return sprawdzOther(stroki,czasRysowania);
            }
            return null;
        }

        private static Ksztalt sprawdzOther(StrokeCollection stroki,int czas)
        {
            if (stroki.Count == 1)
            {
                if (czyKreska(stroki[0],czas)) return dajKsztalt(stroki, "Straight",czas);
            }
            return null;
        }

        private static bool czyKreska(Stroke s,int czas)
        {
            return true;
            double dlugosc = Math.Sqrt
                  (Math.Pow(s.StylusPoints[0].X - s.StylusPoints[s.StylusPoints.Count - 1].X, 2) + Math.Pow(s.StylusPoints[0].Y - s.StylusPoints[s.StylusPoints.Count - 1].Y, (double)2));

            
            Console.WriteLine("--------START____________");
        Console.WriteLine("dlugosc stroka " + s.StylusPoints.Count);

        Console.WriteLine("dlugosc lini " + dlugosc);
        Console.WriteLine("czas " + czas);
            double ilosc=(double)((double)(s.StylusPoints.Count)/(double)(czas));
            Console.WriteLine("Strolkow na sekunde " + ilosc);
            ilosc = (double)((double)(s.StylusPoints.Count) / (double)(dlugosc));
            Console.WriteLine("Strolkow na pixel " + ilosc);
        return false;
        }
    }

}
